package com.guigu.qingcheng.service;

import com.guigu.qingcheng.pojo.TbSpu;
import com.guigu.qingcheng.pojo.vo.Goods;
import com.guigu.qingcheng.pojo.vo.SpuAndSku;
import com.guigu.qingcheng.utils.PageUtil;

import java.util.List;
import java.util.Map;


/**
*
* @author Jiang
* @date 2020/07/25
*/
public interface TbSpuService {


    /**
    * 查询所有
    */
    List<TbSpu> queryAll();

    /**
    * 分页查询所有
    */
    PageUtil<TbSpu> findListAll(Integer pageNum, Integer pageSize);


    /**
    * 按条件分页查询
    */
    PageUtil<TbSpu> pageQueryByAll(Integer pageNum, Integer pageSize, TbSpu tbSpu);


    /**
    * 添加
    */
    boolean saveTbSpu(TbSpu tbSpu);


    /**
    * 修改
    */
    boolean updateTbSpu(TbSpu tbSpu);

    /**
    * 删除
    */
    boolean deleteById(String id);


    /**
    * 根据id查询
    */
    TbSpu findById(String id);

    /**
     * 添加商品
     * @param goods
     * @return
     */
    boolean saveGoods(Goods goods);

    /**
     * 逻辑删除
     * @param id
     * @return
     */
    boolean isDeleteById(String id);

    /**
     * 商品审核 通过审核自动上架
     * @param id
     * @param status
     * @param message
     */
    void audit(String id,String status,String message);

    /**
     * 商品下架
     * @param id
     */
    void pull(String id);

    /**
     * 商品上架
     * @param id
     */
    void put(String id);

    /**
     * 批量商品上架
     * @param ids
     */
    Integer putMany(String[] ids);

    /**
     * 回收商品
     * @param id
     */
    void recycledGoods(String id);

    /**
     * 根据 spu 对象的 Id 查询数据
     * @param id
     * @return
     */
    Goods findGoodsById(String id);

    /**
     *
     * 通过条件查询出所有未审核的商品并分页
     * @return
     */
    PageUtil<TbSpu> selectSpuByStatus(Integer pageNum, Integer pageSize, TbSpu tbSpu);

    /**
     * 查询spu和sku链表 未删除的
     * @param pageNum
     * @param pageSize
     * @param tbSpu
     * @return
     */
    PageUtil<SpuAndSku> selectSpuAndSkuIsDelete(Integer pageNum, Integer pageSize, TbSpu tbSpu);

    /**
     * 查询spu和sku链表 未删除的 并且未审核的
     * @param pageNum
     * @param pageSize
     * @param tbSpu
     * @return
     */
    PageUtil<SpuAndSku> selectSpuAndSkuOnStatus(Integer pageNum, Integer pageSize, TbSpu tbSpu);

    /**
     * 查询spu和sku链表 已逻辑删除的
     * @param pageNum
     * @param pageSize
     * @param tbSpu
     * @return
     */
    PageUtil<SpuAndSku> selectSpuAndSkuDelete(Integer pageNum, Integer pageSize, TbSpu tbSpu);
}
